/*
Pablo Sosa, 12546
* Yoly Moreno, 12519
* Fecha 30 de septiembre de 2013
 * Descripcion del programa: Contiene los nodos que son parte del arbol binario que se creo
*/


public class Nodo<E> {
    //ATRIBUTOS
    private int frec;
    private String codigo;
    private E caracter;
    private Nodo left, right;

    
    //constructor
    public Nodo() {
        //inicializacion de variables que se van a utilizar
        this.frec = 0;
    }

    //Constructor 2
    public Nodo(E varx) {
        this.caracter = varx;
        this.frec = 1;
    }

   //metodos get
    
    
    //devuelve el estado
    public int getFrec() {
        return frec;
    }
    
    //devuelve el estado del caracter que se esta analizando actualmente
    public E getCaracter() {
        return caracter;
    }
    
    //Devuelve el estado del codigo de cada caracter
    public String getCodigo() {
        return codigo;
    }
    
    
    
    //metodos set
    
        public void setFrecuencia(int frec) {
        this.frec = frec;
    }
    
        public void setIzq(Nodo left1) {
        left = left1;
    }

       public void setDer(Nodo righte) {
        right = righte;
    }

    
    //se utiliza para la frec del caracter que se esta analizando
    public void masFrec() {
        this.frec++;
    }
    
 
   //recorre el arbol binario y muestra como es la frec de cada caracter
    public void recorrerTodo(Nodo nodo, String cod) {
            if(nodo.getCaracter() != null) //validacion como programacion defensiva
                System.out.println("Caracter:------ " + nodo.getCaracter() + "\n"
                        + "Frecuencia: ----"  +  nodo.getFrec() +  "\n" +
                        "Codigo:--------- "  +  cod + "\n" );
             
            if(nodo.left != null) {
                codigo = cod + "0";
                nodo.recorrerTodo(nodo.left, codigo);
                
            }
            if(nodo.right!= null) {
                codigo = cod + "1";
                nodo.recorrerTodo(nodo.right, codigo);
            }
 }

    //recorre todos los caracteres del arbol
    public void recorrerTodo() {
                codigo = "0";
                recorrerTodo(left, codigo);

                codigo = "1";
                recorrerTodo(right, codigo);

    }
}